package tod141.medlemsliste.utilities;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import tod141.medlemsliste.model.Endringer;
import tod141.medlemsliste.model.Medlem;

public class ServletUtilities {
  public static void sendResponse(HttpServletResponse response,
      boolean status) throws IOException {
    response.setContentType("text/plain;charset=UTF-8");
    ServletUtilities.noCache(response);
    PrintWriter out=response.getWriter();

    try {
      JSONObject json = new JSONObject();
      json.put("status", status);
      String klientData = json.toString();
      out.println(klientData);
    } catch(Exception e) {
      out.println("{'status': false}");
    }
  }

  public static void sendResponse(HttpServletResponse response,
      Endringer endringer) throws IOException {
    response.setContentType("text/plain;charset=UTF-8");
    ServletUtilities.noCache(response);
    PrintWriter out=response.getWriter();

    try {
      /* Ang. "farlige" tegn i utskrift, det er ingen.
       * Hos klient blir data lagt inn som et Javascript-objekt, og prototype
       * vil ufarliggjøre evt. farlige tegn.
       * 
       * Tolket som javascriptkode er tagger kun tekst.
       */
      JSONObject svar = new JSONObject();
      svar.put("status", true);
      svar.put("loggId",endringer.getLoggId());
      List<Medlem> nyeMedlemmer = endringer.getNyeMedlemmer();
      JSONArray nyeMedlemmerJSON = new JSONArray(nyeMedlemmer,false);
      svar.put("nyeMedlemmer", nyeMedlemmerJSON);

      List<Medlem> endredeMedlemmer = endringer.getEndredeMedlemmer();
      JSONArray endredeMedlemmerJSON = new JSONArray(endredeMedlemmer,false);
      svar.put("endredeMedlemmer", endredeMedlemmerJSON);

      List<Integer> slettedeMedlemmer = endringer.getSlettedeMedlemmer();
      JSONArray slettedeMedlemmerJSON = new JSONArray(slettedeMedlemmer);
      svar.put("slettedeMedlemmer", slettedeMedlemmerJSON);

      String klientData = svar.toString(2);
      out.println(klientData);
    } catch (JSONException e) {
      out.println("{'status': false}");
    }
  }

  public static void visFeil(HttpServletResponse response,
      Exception e) throws IOException {
    response.setContentType("text/plain;charset=UTF-8");
    ServletUtilities.noCache(response);
    PrintWriter out=response.getWriter();
    out.println(e);
  }

  public static void visMelding(HttpServletResponse response,
      String s) throws IOException {
    response.setContentType("text/plain;charset=UTF-8");
    ServletUtilities.noCache(response);
    PrintWriter out=response.getWriter();
    out.println(s);
  }

  private static void noCache(HttpServletResponse response) {
    response.setHeader("Expires", "Thu, 19 Nov 1981 08:52:00 GMT");
    response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    response.addHeader("Cache-Control", "post-check=0, pre-check=0");
    response.setHeader("Pragma", "no-cache");
  }
}
